// @ts-ignore isolatedModules

function element(selector: string) {
  return document.querySelector<HTMLElement>(selector);
}

function inputElement(selector: string) {
  return document.querySelector<HTMLInputElement>(selector);
}

function formatDate(date: string) {
  const year = date.slice(0, 4);
  const month = date.slice(4, 6);
  const day = date.slice(6, 8);
  date = `${year}-${month}-${day}`;
  if (isNaN(Date.parse(date))) {
    throw new Error(`日期格式错误：${date}`);
  }
  return date;
}

function sleep(ms: number) {
  return new Promise<void>((resolve) => setTimeout(resolve, ms));
}

// 添加（js）
// addEventListener("paste", (ev) => {
//   try {
//     let [
//       标题,
//       备案主体,
//       操作类型,
//       编码类型,
//       编码_产品ID或资费ID_,
//       一级分类,
//       二级分类,
//       资费名称,
//       资费属性,
//       使用范围,
//       使用地区,
//       有效期限,
//       在网要求,
//       销售渠道,
//       退订方式,
//       上线日期,
//       违约责任,
//       分配,
//     ] = ev.clipboardData.getData("text").split("\t");
//     let 部门领导 = "张帆";

//     if (编码类型 === "增值业务代码") {
//       编码类型 = "增值业务编码";
//     }
//     上线日期 = formatDate(上线日期);
//     分配 = 分配.trimEnd();

//     if (分配.trim() !== "林文迪") {
//       throw new Error(`分配人错误：${JSON.stringify(分配)}`);
//     }

//     inputElement("#field_title input").value = 标题;
//     inputElement("#field_reporter input").value = 备案主体;
//     element(`#field_action_type input[value="${操作类型}"]`).click();
//     element(`#field_codeType [infinityname="${编码类型}"]`).click();
//     inputElement("#field_codeId input").value = 编码_产品ID或资费ID_;
//     element(`#field_type1 [infinityname="${一级分类}"]`).click();
//     element(`#field_type2 [infinityname="${二级分类}"]`).click();
//     inputElement("#field_name input").value = 资费名称;
//     element(`#field_azfsx [infinityname="${资费属性}"]`).click();
//     inputElement("#field_applicable_people input").value = 使用范围;
//     inputElement("#field_applicable_area input").value = 使用地区;
//     inputElement("#field_applicable_area input").value = 使用地区;
//     inputElement("#field_valid_period input").value = 有效期限;
//     inputElement("#field_duration input").value = 在网要求;
//     inputElement("#field_channel textarea").value = 销售渠道;
//     inputElement("#field_tdfs input").value = 退订方式;
//     inputElement("#field_launchDate input").value = 上线日期;
//     inputElement("#field_responsibility textarea").value = 违约责任;
//     element(
//       `#field_filingDepartmentLeader [infinityname="${部门领导}"]`
//     ).click();
//   } catch (error) {
//     console.error(error);
//     alert(`${error}`);
//   }
// });

// 更新
const windowAlert = window.alert;
window.alert = function (message) {
  if (message === "文本域赋值参数错误") {
    console.log(message);
    return;
  }
  windowAlert(message);
};

addEventListener("paste", async (ev) => {
  try {
    let [
      // 套餐资费
      省份选择,
      _发布渠道,
      _一级菜单,
      _二级菜单,
      业务名称,
      资费属性,
      _资费类型,
      // 资费名称
      新业务名称,
      _资费,
      _资费单位,
      // 新业务包含内容
      _新业务包含内容,
      // 业务介绍
      服务内容,
      适用范围,
      有效期限,
      销售渠道,
      在网要求,
      退订方式,
      违约责任,
      上线日期,
      下线日期,
      // 说明及提示
      新业务说明,
      _温馨提示,
      // 其他
      _是否需要登录查看,
      产品ID,
      _业务负责人,
      _业务负责人联系电话,
      _业务负责人所在部门或单位,
      // 备案专用字段
      备案号,
      _序列号,
      _报送主体,
      _操作类型,
      _一级分类,
      _适用地区,
      _原方案编号,
      //
      更新列,
      //
      原适用范围,
      //
      _客服反馈的情况,
      //
      产品研发部分配,
      //
      _是否与数字营销部重叠,
    ] = ev.clipboardData!.getData("text").split("\t");
    let 部门领导 = "张帆";

    switch (省份选择) {
      case "全选":
        省份选择 = "000";
        break;
      default:
        throw new Error(`无法转换到省份对应的代码：${省份选择}`);
    }

    上线日期 = formatDate(上线日期);
    下线日期 = formatDate(下线日期);

    if (产品研发部分配.trim() !== "林文迪") {
      throw new Error(`分配人错误：${JSON.stringify(产品研发部分配)}`);
    }

    // 打开【资费备案】页面
    element(`#field_action_type input[value="修改"]`)!.click();
    while (element("#reportNo") === null) {
      await sleep(10);
    }

    // 查询信息
    inputElement("#reportNo")!.value = 备案号;
    element("#productFiling_btn")!.click();
    while (true) {
      const result = element("#dialog-accountChange tbody tr");
      if (result !== null) {
        const id = result.querySelector<HTMLElement>(
          "td:nth-child(2) code"
        )!.innerHTML;
        if (id === 备案号) {
          result.querySelector("input")!.click();
          element("#dialog-accountChange .dialog_button_0")!.click();
          break;
        }
      }
      await sleep(10);
    }

    // 修改信息
    for (const column of 更新列.split("+")) {
      switch (column) {
        case "M":
          inputElement("#field_applicable_people input")!.value = 适用范围;
          break;
        case "O":
          inputElement("#field_channel textarea")!.value = 销售渠道;
          break;
        default:
          throw new Error(`无法处理列：${column}`);
      }
    }

    {
      // 标题
      const e = inputElement("#field_title input")!;
      e.value = `联通在线广州公司${新业务名称}产品备案`;
    }

    {
      // 备案主体
      const e = inputElement("#field_reporter input")!;
      if (e.value === "") {
        e.style.background = "red";
      }
    }

    {
      // 编码类型
      // 跳过
    }

    {
      // 编码(产品ID或资费ID)
      const e = inputElement("#field_codeId input")!;
      if (e.value !== 产品ID) {
        e.style.background = e.value === "" ? "yellow" : "red";
        e.value = 产品ID;
      }
    }

    {
      // 资费名称
      const e = inputElement("#field_name input")!;
      if (e.value !== 新业务名称) {
        e.style.background =
          e.value === "" && 业务名称 === 新业务名称 ? "yellow" : "red";
        e.value = 新业务名称;
      }
    }

    {
      // 语音（分钟）
      // 跳过
    }

    {
      // 短彩信（条）
      // 跳过
    }

    {
      // 通用流量
      // 跳过
    }

    {
      // 流量单位
      // 跳过
    }

    {
      // 定向流量
      // 跳过
    }

    {
      // 定向流量单位
      // 跳过
    }

    {
      // IPTV
      // 跳过
    }

    {
      // 宽带
      // 跳过
    }

    {
      // 权益
      // 跳过
    }

    {
      // 服务内容
      const e = inputElement("#field_other_content textarea")!;
      if (e.value !== 服务内容) {
        e.style.background = e.value === "" ? "yellow" : "red";
        e.value = 服务内容;
      }
    }

    {
      // 资费属性
      const e = inputElement(`#field_azfsx input`)!;
      if (e.value !== 资费属性) {
        e.style.background = e.value === "" ? "yellow" : "red";
        element(`#field_azfsx [infinityname="${资费属性}"]`)!.click();
      }
    }

    {
      // 适用范围
      const e = inputElement(`#field_applicable_people input`)!;
      if (e.value !== 适用范围) {
        e.style.background =
          e.value === "" && 原适用范围 === 适用范围 ? "yellow" : "red";
        e.value = 适用范围;
      }
    }

    {
      // 适用地区
      const e = inputElement("#field_applicable_area input")!;
      if (e.value !== 省份选择) {
        e.style.background = e.value === "" ? "yellow" : "red";
        e.value = 省份选择;
      }
    }

    {
      // 有效期限
      const e = inputElement("#field_valid_period input")!;
      if (e.value !== 有效期限) {
        e.style.background = e.value === "" ? "yellow" : "red";
        e.value = 有效期限;
      }
    }

    {
      // 在网要求
      const e = inputElement("#field_duration input")!;
      if (e.value !== 在网要求) {
        e.style.background = e.value === "" ? "yellow" : "red";
        e.value = 在网要求;
      }
    }

    {
      // 销售渠道
      const e = inputElement("#field_channel textarea")!;
      if (e.value !== 销售渠道) {
        e.style.background = e.value === "" ? "yellow" : "red";
        e.value = 销售渠道;
      }
    }

    {
      // 退订方式
      const e = inputElement("#field_tdfs input")!;
      if (e.value !== 退订方式) {
        e.style.background = e.value === "" ? "yellow" : "red";
        e.value = 退订方式;
      }
    }

    {
      // 上线日期
      const e = inputElement("#field_launchDate input")!;
      if (e.value !== 上线日期) {
        e.style.background = e.value === "" ? "yellow" : "red";
        e.value = 上线日期;
      }
    }

    {
      // 下线日期
      const e = inputElement("#field_offlineDate input")!;
      if (e.value !== 下线日期) {
        e.style.background = e.value === "" ? "yellow" : "red";
        e.value = 下线日期;
      }
    }

    {
      // 违约责任
      const e = inputElement("#field_responsibility textarea")!;
      if (e.value !== 违约责任) {
        e.style.background = e.value === "" ? "yellow" : "red";
        e.value = 违约责任;
      }
    }

    {
      // 其他说明
      const e = inputElement("#field_others textarea")!;
      if (e.value !== 新业务说明) {
        e.style.background = e.value === "" ? "yellow" : "red";
        e.value = 新业务说明;
      }
    }

    {
      // 部门领导
      const e = inputElement(`#field_filingDepartmentLeader input`)!;
      if (e.value !== 部门领导) {
        e.style.background = e.value === "" ? "yellow" : "red";
        element(
          `#field_filingDepartmentLeader [infinityname="${部门领导}"]`
        )!.click();
      }
    }

    // 添加再次发起按钮
    while (element("#dialog-success .dialog_button") === null) {
      await sleep(10);
    }
    const buttons = element("#dialog-success .dialog_button")!;
    const reloadButton = document.createElement("a");
    reloadButton.classList.add("dialog_button_0");
    reloadButton.innerHTML = "再次发起";
    reloadButton.onclick = function () {
      location.reload();
    };
    buttons.appendChild(reloadButton);
  } catch (error) {
    console.error(error);
    alert(`${error}`);
  }
});
